



<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  
  <title>Not using zip() to iterate over a pair of lists &mdash; Python Anti-Patterns  documentation</title>
  

  
  

  

  
  
    

  

  
  
    <link rel="stylesheet" href="../_static/css/theme.css" type="text/css" />
  

  
    <link rel="stylesheet" href="../_static/css/ribbon.css" type="text/css" />
  
    <link rel="stylesheet" href="../_static/css/font-awesome-4.1.0/css/font-awesome.min.css" type="text/css" />
  
    <link rel="stylesheet" href="../_static/css/menu.css" type="text/css" />
  
        <link rel="index" title="Index"
              href="../genindex.html"/>
        <link rel="search" title="Search" href="../search.html"/>
    <link rel="top" title="Python Anti-Patterns  documentation" href="../index.html"/>
        <link rel="up" title="Readability" href="index.html"/>
        <link rel="next" title="Putting type information in a variable name" href="putting_type_information_in_a_variable_name.html"/>
        <link rel="prev" title="Not using unpacking for updating multiple values at once" href="not_using_unpacking_for_updating_multiple_values_at_once.html"/> 

</head>

<body class="wy-body-for-nav" role="document">

  <div class="wy-grid-for-nav">

    
    <nav data-toggle="wy-nav-shift" class="wy-nav-side">
      <div class="wy-side-nav-search">
        <a href="../index.html"> Python Anti-Patterns</a>
        <div role="search">
  <form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
    <input type="text" name="q" placeholder="Search docs" />
    <input type="hidden" name="check_keywords" value="yes" />
    <input type="hidden" name="area" value="default" />
  </form>
</div>
      </div>


      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
        
        
            <ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../correctness/index.html"><i class="fa fa-check"></i> Correctness</a></li>
<li class="toctree-l1"><a class="reference internal" href="../maintainability/index.html"><i class="fa fa-puzzle-piece"></i> Maintainability</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="index.html"><i class="fa fa-eye"></i> Readability</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="asking_for_permission_instead_of_forgiveness_when_working_with_files.html">Asking for permission instead of forgiveness</a></li>
<li class="toctree-l2"><a class="reference internal" href="comparison_to_none.html">Comparing things to <cite>None</cite> the wrong way</a></li>
<li class="toctree-l2"><a class="reference internal" href="comparison_to_true.html">Comparing things to <cite>True</cite> the wrong way</a></li>
<li class="toctree-l2"><a class="reference internal" href="do_not_compare_types_use_isinstance.html">Using <cite>type()</cite> to compare types</a></li>
<li class="toctree-l2"><a class="reference internal" href="not_using_a_dict_comprehension.html">Not using dict comprehensions</a></li>
<li class="toctree-l2"><a class="reference internal" href="not_using_dict_keys_when_formatting_strings.html">Not using dict keys when formatting strings</a></li>
<li class="toctree-l2"><a class="reference internal" href="not_using_items_to_iterate_over_a_dictionary.html">Not using <code class="docutils literal notranslate"><span class="pre">items()</span></code> to iterate over a dictionary</a></li>
<li class="toctree-l2"><a class="reference internal" href="not_using_named_tuples_when_returning_more_than_one_value.html">Not using named tuples when returning more than one value from a function</a></li>
<li class="toctree-l2"><a class="reference internal" href="not_using_unpacking_for_updating_multiple_values_at_once.html">Not using unpacking for updating multiple values at once</a></li>
<li class="toctree-l2 current"><a class="current reference internal" href="#">Not using <code class="docutils literal notranslate"><span class="pre">zip()</span></code> to iterate over a pair of lists</a></li>
<li class="toctree-l2"><a class="reference internal" href="putting_type_information_in_a_variable_name.html">Putting type information in a variable name</a></li>
<li class="toctree-l2"><a class="reference internal" href="test_for_object_identity_should_be_is_not.html">Test for object identity should be <code class="docutils literal notranslate"><span class="pre">is</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="using_an_unpythonic_loop.html">Using an unpythonic loop</a></li>
<li class="toctree-l2"><a class="reference internal" href="using_map_or_filter_where_list_comprehension_is_possible.html">Using <code class="docutils literal notranslate"><span class="pre">map()</span></code> or <code class="docutils literal notranslate"><span class="pre">filter()</span></code> where list comprehension is possible</a></li>
<li class="toctree-l2"><a class="reference internal" href="using_camelcase_in_function_names.html">Using <cite>CamelCase</cite> in function names</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../security/index.html"><i class="fa fa-lock"></i> Security</a></li>
<li class="toctree-l1"><a class="reference internal" href="../performance/index.html"><i class="fa fa-dashboard"></i> Performance</a></li>
<li class="toctree-l1"><a class="reference internal" href="../django/index.html"><i class="fa fa-book"></i> Django</a></li>
</ul>

        
      </div>
      &nbsp;

    </nav>

    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">

      
      <nav class="wy-nav-top" role="navigation" aria-label="top navigation">
        <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
        <a href="../index.html">Python Anti-Patterns</a>
      </nav>


      
      <div class="wy-nav-content" id="signup-box" >
        <div class="rst-content">
          <div class="navigation" role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
    <li><a href="../index.html">Documentation</a> &raquo;</li>
      
          <li><a href="index.html"><i class="fa fa-eye"></i> Readability</a> &raquo;</li>
      
    <li>Not using <code class="docutils literal notranslate"><span class="pre">zip()</span></code> to iterate over a pair of lists</li>
      <li class="wy-breadcrumbs-aside">
        
          <a href="../_sources/readability/not_using_zip_to_iterate_over_a_pair_of_lists.rst.txt" rel="nofollow"> View page source</a>
        
      </li>
  </ul>
  <hr/>
</div>

          <div role="main">
            
  <div class="section" id="not-using-zip-to-iterate-over-a-pair-of-lists">
<h1>Not using <code class="docutils literal notranslate"><span class="pre">zip()</span></code> to iterate over a pair of lists<a class="headerlink" href="#not-using-zip-to-iterate-over-a-pair-of-lists" title="Permalink to this headline">¶</a></h1>
<p><a class="reference external" href="http://legacy.python.org/dev/peps/pep-0020/">PEP 20</a> states “There should be one– and preferably only one –obvious way to do it.” The preferred way to iterate through a pair of lists is to declare two variables in a loop expression, and then call <code class="docutils literal notranslate"><span class="pre">zip(list_one,</span> <span class="pre">list_two)</span></code>, where <code class="docutils literal notranslate"><span class="pre">list_one</span></code> and <code class="docutils literal notranslate"><span class="pre">list_two</span></code> are the two lists you wish to iterate through. For each loop iteration, Python will automatically assign the first variable as the next value in the first list, and the second variable as the next value in the second list.</p>
<div class="section" id="anti-pattern">
<h2>Anti-pattern<a class="headerlink" href="#anti-pattern" title="Permalink to this headline">¶</a></h2>
<p>The code below defines a variable <code class="docutils literal notranslate"><span class="pre">index</span></code> which serves as an index variable for iterating through two lists. Within the for loop the code accesses the corresponding value for each list by using the index variable. This is a common way for iterating through two lists, but it is not the preferred way in Python.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">numbers</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
<span class="n">letters</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;A&quot;</span><span class="p">,</span> <span class="s2">&quot;B&quot;</span><span class="p">,</span> <span class="s2">&quot;C&quot;</span><span class="p">]</span>

<span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">numbers</span><span class="p">)):</span>
    <span class="nb">print</span><span class="p">(</span><span class="n">numbers</span><span class="p">[</span><span class="n">index</span><span class="p">],</span> <span class="n">letters</span><span class="p">[</span><span class="n">index</span><span class="p">])</span>
</pre></div>
</div>
</div>
<div class="section" id="best-practice">
<h2>Best-practice<a class="headerlink" href="#best-practice" title="Permalink to this headline">¶</a></h2>
<div class="section" id="use-zip-to-iterate-through-a-pair-of-lists">
<h3>Use <code class="docutils literal notranslate"><span class="pre">zip()</span></code> to iterate through a pair of lists<a class="headerlink" href="#use-zip-to-iterate-through-a-pair-of-lists" title="Permalink to this headline">¶</a></h3>
<p>The updated code below demonstrates the Pythonic style for iterating through a pair of lists. When the code defines two variables in its <code class="docutils literal notranslate"><span class="pre">for</span></code> loop in conjunction with a call to <code class="docutils literal notranslate"><span class="pre">zip(numbers,</span> <span class="pre">letters)</span></code> on the pair of lists, Python automatically assigns the first variable as the next value in the first list, and the second variable as the next value in the second list.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">numbers</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]</span>
<span class="n">letters</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;A&quot;</span><span class="p">,</span> <span class="s2">&quot;B&quot;</span><span class="p">,</span> <span class="s2">&quot;C&quot;</span><span class="p">]</span>

<span class="k">for</span> <span class="n">numbers_value</span><span class="p">,</span> <span class="n">letters_value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">numbers</span><span class="p">,</span> <span class="n">letters</span><span class="p">):</span>
    <span class="nb">print</span><span class="p">(</span><span class="n">numbers_value</span><span class="p">,</span> <span class="n">letters_value</span><span class="p">)</span>
</pre></div>
</div>
</div>
</div>
<div class="section" id="references">
<h2>References<a class="headerlink" href="#references" title="Permalink to this headline">¶</a></h2>
<ul class="simple">
<li><p><a class="reference external" href="http://legacy.python.org/dev/peps/pep-0020/">PEP 20 - The Zen of Python</a></p></li>
<li><p><a class="reference external" href="https://docs.python.org/3.4/library/functions.html#zip">Built-in Functions &gt; zip(*iterables)</a></p></li>
</ul>
</div>
</div>


          </div>
          <footer>
  
    <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
      
        <a href="putting_type_information_in_a_variable_name.html" class="btn btn-neutral float-right" title="Putting type information in a variable name"/>Next <span class="fa fa-arrow-circle-right"></span></a>
      
      
        <a href="not_using_unpacking_for_updating_multiple_values_at_once.html" class="btn btn-neutral" title="Not using unpacking for updating multiple values at once"><span class="fa fa-arrow-circle-left"></span> Previous</a>
      
    </div>
  

  <hr/>

  <div role="contentinfo">
    <p>
    </p>
  </div>

    <!--End mc_embed_signup-->
  <a href="https://github.com/snide/sphinx_rtd_theme">Sphinx theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a> - Last updated: Sep 29, 2020 
</footer>
        </div>
      </div>

    </section>


  </div>
  


  

    <script type="text/javascript">
        var DOCUMENTATION_OPTIONS = {
            URL_ROOT:'../',
            VERSION:'',
            COLLAPSE_INDEX:false,
            FILE_SUFFIX:'.html',
            HAS_SOURCE:  true
        };
    </script>
      <script type="text/javascript" src="../_static/jquery.js"></script>
      <script type="text/javascript" src="../_static/underscore.js"></script>
      <script type="text/javascript" src="../_static/doctools.js"></script>
      <script type="text/javascript" src="../_static/language_data.js"></script>

  

  
  
    <script type="text/javascript" src="../_static/js/theme.js"></script>
  

  
  
  <script type="text/javascript">
      jQuery(function () {
          SphinxRtdTheme.StickyNav.enable();
      });
  </script>
   

  <!-- Place this tag right after the last button or just before your close body tag. -->
  <script async defer id="github-bjs" src="https://buttons.github.io/buttons.js"></script>

</body>
</html>